
// 用户相关信息
export default {
  namespaced: true,
  state: {
    // 当前用户信息
    currentUserInfo: {},
    // 是否已获取用户信息
    hasFetchUserInfo: false,
    // 当前用户各菜单可访问的组织,该数据是一个对象,最外层是菜单,菜单下是组织类型,组织类型下是组织列表.
    menuTypeOrgs: {}
  },
  getters: {
    currentUserId:(state) => {
      return state.currentUserInfo.id;
    },
    //当前用户名
    currentUserName: (state) => () => {
      return (state.currentUserInfo.userName)
    },
    // 当前用户的组织
    currentUserOrg: (state) => () => {
      return (state.currentUserInfo.org)
    },
    /**
     * 获取某个菜单下的某类型的组织列表,如果没有的话会返回一个false
     * @param {string} menuId - 菜单ID
     * @param {array | string} - 组织类型
     */
    getOrgs: (state) => (menuId, types) => {
      if(state.menuTypeOrgs[menuId] && Array.isArray(state.menuTypeOrgs[menuId][types.toString()])){
        return state.menuTypeOrgs[menuId][types.toString()]
      }else {
        return false
      }
    },
    // 当前用户的头像地址
    getAvatar(state){
      return state.currentUserInfo.headSculpture || require('@/assets/avatar.png')
    },
  },
  mutations: {
    setCurrentUserInfo(state, currentUserInfo) {
      state.currentUserInfo = currentUserInfo
    },
    setHasFetchUserInfo(state, status) {
      state.hasFetchUserInfo = status
    },
    /**
     * 设置某个菜单下的某类型的组织
     * @param state
     * @param {string} menuId - 菜单ID
     * @param {string | array} types - 组织类型
     * @param {array} orgs - 组织列表
     */
    setOrgs(state, {menuId, types, orgs}){
      if(menuId && types && Array.isArray(orgs)){
        if(!state.menuTypeOrgs[menuId]){
          state.menuTypeOrgs[menuId] = {}
        }
        state.menuTypeOrgs[menuId][types.toString()] = orgs
      }else{
        console.error(menuId,types,orgs)
        throw new Error('数据错误')
      }
    },
    setAvatar(state, avatar){
      state.currentUserInfo.headSculpture = avatar
    }
  },
  actions: {

  }
}
